package jp.co.katagaki.crossword.puzzle;

import java.util.List;

/**
 * クロスワードパズルの情報を保持するクラス。
 *
 * @author naotake
 */
public class CrosswordPuzzle implements Cloneable {

    /** パズル ID */
    private int puzzleId;
    /** 入力ワード */
    private String[][] inputWords;
    /** 答え */
    private String answer;
    /** パズルの縦のサイズ */
    private int lengthSize;
    /** パズルの横のサイズ */
    private int widthSize;
    /** キーワード一覧 */
    private List<Keyword> keywordList;

    /**
     * パズル ID を取得します。
     *
     * @return パズル ID
     */
    public int getPuzzleId() {
        return puzzleId;
    }

    /**
     * パズル ID を設定します。
     *
     * @param puzzleId
     *            パズル ID
     */
    public void setPuzzleId(int puzzleId) {
        this.puzzleId = puzzleId;
    }

    /**
     * 入力ワードを取得します。
     *
     * @return 入力ワード
     */
    public String[][] getInputWords() {
        return inputWords;
    }

    /**
     * 入力ワードを設定します。
     *
     * @param inputWords
     *            入力ワード
     */
    public void setInputWords(String[][] inputWords) {
        this.inputWords = inputWords;
    }

    /**
     * 答えを取得します。
     *
     * @return 答え
     */
    public String getAnswer() {
        return answer;
    }

    /**
     * 答えを設定します。
     *
     * @param answer
     *            答え
     */
    public void setAnswer(String answer) {
        this.answer = answer;
    }

    /**
     * パズルの縦のサイズを取得します。
     *
     * @return パズルの縦のサイズ
     */
    public int getLengthSize() {
        return lengthSize;
    }

    /**
     * パズルの縦のサイズを設定します。
     *
     * @param lengthSize
     *            パズルの縦のサイズ
     */
    public void setLengthSize(int lengthSize) {
        this.lengthSize = lengthSize;
    }

    /**
     * パズルの横のサイズを取得します。
     *
     * @return パズルの横のサイズ
     */
    public int getWidthSize() {
        return widthSize;
    }

    /**
     * パズルの横のサイズを設定します。
     *
     * @param widthSize
     *            パズルの横のサイズ
     */
    public void setWidthSize(int widthSize) {
        this.widthSize = widthSize;
    }

    /**
     * キーワード一覧を取得します。
     *
     * @return キーワード一覧
     */
    public List<Keyword> getKeywordList() {
        return keywordList;
    }

    /**
     * キーワード一覧を設定します。
     *
     * @param keywordList
     *            キーワード一覧
     */
    public void setKeywordList(List<Keyword> keywordList) {
        this.keywordList = keywordList;
    }

    /**
     * クロスワードパズル情報のクローン（コピー）を返す。
     *
     * @return クロスワードパズル情報のクローン（コピー）
     */
    @Override
    public CrosswordPuzzle clone() {
        try {
            return (CrosswordPuzzle) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError(); // 起こるはずが無い
        }
    }
}
